package com.ruoyi.generator.util;

import java.time.LocalDateTime;
import java.time.LocalTime;

public class JiSuanUtil {

    /**
     * 判断当前时间是否在给定的时间区间内
     *
     * @param timeRange 时间区间，格式为"开始时间 ~ 结束时间"，其中时间格式为"HH:mm"，如"08:00 ~ 10:00"
     * @return 当前时间是否在给定的时间区间内 false true
     */
    public static boolean isCurrentTimeInRange(String timeRange) {
        // 分割时间区间字符串
        String[] parts = timeRange.split("[～~]+");
        if (parts.length != 2) {
            throw new IllegalArgumentException("无效的时间格式");
        }

        // 提取开始和结束时间部分
        String startTimeStr = parts[0].trim().replace("当日", "");
        String endTimeStr = parts[1].trim().replace("当日", "");

        // 解析为LocalTime对象
        LocalTime startTime = LocalTime.parse(startTimeStr);
        LocalTime endTime = LocalTime.parse(endTimeStr);

        // 获取当前日期时间
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime startDateTime = LocalDateTime.of(now.toLocalDate(), startTime);
        LocalDateTime endDateTime = LocalDateTime.of(now.toLocalDate(), endTime);

        // 处理跨天时间段
        if (endTime.isBefore(startTime)) {
            endDateTime = endDateTime.plusDays(1);
        }

        // 判断当前时间是否在区间内（包含边界）
        return !now.isBefore(startDateTime) && !now.isAfter(endDateTime);
    }


    /**
     * 根据状态判断当前时间与时间区间的关系
     *
     * @param timeRange 时间区间，格式为"开始时间 ~ 结束时间"，如"08:00 ~ 10:00"
     * @param status    状态："运行中" 或 "已过期"
     * @return 根据状态返回：
     *         - 若状态为"运行中"：当前时间是否在区间内
     *         - 若状态为"已过期"：当前时间是否已超过结束时间
     * @throws IllegalArgumentException 如果时间格式无效或状态不支持
     */
    public static boolean checkTimeStatus(String timeRange, String status) {
        // 参数校验
        if (!"运行中".equals(status) && !"已过期".equals(status)) {
            throw new IllegalArgumentException("状态参数必须为'运行中'或'已过期'");
        }

        // 解析时间区间
        String[] parts = timeRange.split("[～~]+");
        if (parts.length != 2) {
            throw new IllegalArgumentException("时间格式无效，示例: 08:00 ~ 10:00");
        }

        // 提取并格式化时间
        LocalTime start = LocalTime.parse(parts[0].trim().replace("当日", ""));
        LocalTime end = LocalTime.parse(parts[1].trim().replace("当日", ""));

        // 处理跨天逻辑
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime startDt = LocalDateTime.of(now.toLocalDate(), start);
        LocalDateTime endDt = LocalDateTime.of(now.toLocalDate(), end);
        if (end.isBefore(start)) endDt = endDt.plusDays(1);

        // 根据状态返回结果
        return "运行中".equals(status)
                ? !now.isBefore(startDt) && !now.isAfter(endDt)  // 包含边界
                : now.isAfter(endDt);                             // 严格过期
    }
    // 测试用例
    public static void main(String[] args) {
        // 跨天示例：22:00 ~ 02:00
        System.out.println(checkTimeStatus("当日10:56 ~ 当日12:00", "运行中")); // 当前在区间内则true
        System.out.println(checkTimeStatus("当日10:00 ~ 当日10:50", "已过期")); // 超过02:00则true
    }
}
